home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / units / txtmouse.pas < prev    next >
Pascal/Delphi Source File  |  1994-04-03  |  2KB  |  105 lines

  1. UNIT TxtMouse;
  2.  
  3. INTERFACE
  4.  
  5. CONST     ON          = TRUE;
  6.           OFF         =FALSE;
  7.           None        =    0;
  8.           Left        =    1;
  9.           Right       =    2;
  10.           Middle      =    3;
  11.  
  12. VAR       MouseButtons,
  13.           MouseXpos,
  14.           MouseYpos   :BYTE;
  15.  
  16. FUNCTION  MouseReset:BOOLEAN;
  17. PROCEDURE Mouse(mode:BOOLEAN);
  18. PROCEDURE MouseEndInterrupt;
  19. PROCEDURE MouseInitiateInterrupt;
  20. PROCEDURE MouseSetPosition(x,y:BYTE);
  21.  
  22. IMPLEMENTATION
  23.  
  24. VAR       MouseOldInterrupt:POINTER;
  25.           MouseState:BOOLEAN;
  26.  
  27. FUNCTION  InterruptVector(pntr:POINTER; itr:BYTE):POINTER;
  28.  BEGIN
  29.    ASM CLI END;
  30.    InterruptVector:=Ptr(MemW[0:itr*4+2],MemW[0:itr*4]);
  31.    MemW[0:itr*4]:=Ofs(pntr^); MemW[0:itr*4+2]:=Seg(pntr^);
  32.    ASM STI END;
  33.  END;
  34.  
  35. {$F+}
  36. PROCEDURE MouseInterrupt; INTERRUPT; ASSEMBLER;
  37.  ASM
  38.      MOV  ax,$0003
  39.      INT  $33
  40.      SHR  cx,3
  41.      SHR  dx,3
  42.      INC  cx
  43.      INC  dx
  44.      MOV  MouseButtons,bl
  45.      MOV  MouseXpos,cl
  46.      MOV  MouseYpos,dl
  47.      PUSHF
  48.  END;
  49. {$F-}
  50.  
  51. FUNCTION  MouseReset:BOOLEAN; ASSEMBLER;
  52.  ASM
  53.      MOV  ax,$0000
  54.      INT  $33
  55.  END;
  56.  
  57. PROCEDURE Mouse(mode:BOOLEAN); ASSEMBLER;
  58.  ASM
  59.      MOV  ax,$0002
  60.      MOV  bl,mode
  61.      MOV  MouseState,bl
  62.      CMP  bl,OFF
  63.      JE   @nx
  64.      MOV  ax,$0001
  65. @nx: INT  $33
  66.  END;
  67.  
  68. PROCEDURE MouseInitiateInterrupt;
  69.  BEGIN
  70.    MouseOldInterrupt:=InterruptVector(@MouseInterrupt,$1C);
  71.     ASM
  72.      MOV  ax,$0003
  73.      INT  $33
  74.      SHR  cx,3
  75.      INC  cx
  76.      SHR  dx,3
  77.      INC  dx
  78.      MOV  MouseXpos,cl
  79.      MOV  MouseYPos,dl
  80.      MOV  MouseButtons,bl
  81.     END;
  82.  END;
  83.  
  84. PROCEDURE MouseEndInterrupt;
  85.  BEGIN
  86.    InterruptVector(MouseOldInterrupt,$1C);
  87.  END;
  88.  
  89. PROCEDURE MouseSetPosition(x,y:BYTE); ASSEMBLER;
  90.  ASM
  91.      MOV  ax,$0004
  92.      MOV  cl,x
  93.      MOV  ch,$00
  94.      DEC  cx
  95.      SHL  cx,3
  96.      MOV  dl,y
  97.      MOV  dh,$00
  98.      DEC  dx
  99.      SHL  dx,3
  100.      INT  $33
  101.  END;
  102.  
  103.  
  104. BEGIN
  105. END.